package com.yupi.springbootinit.utils;


import org.springframework.beans.BeanUtils;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @author 叶枫
 * @date 2023/10/26.
 */


public class BeanCopyUtils {

    /**定义私有构造方法*/
    public BeanCopyUtils(){}

    /**
     *单个bean的拷贝 不经常用
     * @param source ：源对象，第一个参数是要去拷贝的对象。
     * @param clazz  类的字节码 将源对象的属性 拷贝到目标对象
     * @return
     * @param <V>
     */
    public static <V> V copyBean(Object source, Class<V> clazz){
        V v =null;
        try {
                //通过反射创建目标对象
                 v =  clazz.newInstance();
                 //使用spring的工具类 实行copy
            BeanUtils.copyProperties(source,v);

        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return v;
    }

    /**
     * copy 集合Bean
     * @param list 要copy集和对象
     * @param clazz 目标对象 需要copy 源对象集合
     * @return
     * @param <O>
     * @param <V>
     */

    public  static <O,V> List<V> copyBeanList(List<O> list,Class<V> clazz){
        //普通方式
//          List<V> vList = new ArrayList<>();
//        for (O o : list) {
//
//            V v = copyBean(o, clazz);
//            vList.add(v);
//        }
        //lambda方式
        return list.stream()
                .map((O o) -> copyBean(o, clazz))
                .collect(Collectors.toList());

    }
}
